/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
    TreeNode* res=NULL;
public:
    TreeNode* Convert(TreeNode* pRootOfTree) {
        if (pRootOfTree==NULL)
            return NULL;
        Convert(pRootOfTree->right);
        if (res!= NULL){                //按照最终的左结点来看，左结点只有一个  与它的根结点建立连接
            pRootOfTree->right=res;    //然后整个递归过程即将左结点拓展为左子树
            res->left=pRootOfTree;    //至于这里为什么是右节点  因为以左节点开始的话递归结果是反着的... 需要额外指针来存储初始结点
        }
        res=pRootOfTree;
        Convert(pRootOfTree->left);
        return res;
    }
};